package org.xx.armory.service.security.impl;

import org.xx.armory.config.ConfigurationManager;
import org.xx.armory.config.security.AuthenticationSection;
import org.xx.armory.service.AbstractService;
import org.xx.armory.service.security.UserPermProvider;

import java.util.Base64;

import static org.apache.commons.lang3.StringUtils.trimToEmpty;
import static org.xx.armory.commons.CryptographicUtils.disturb;
import static org.xx.armory.commons.CryptographicUtils.hash;

/**
 * 基础帐户角色管理服务的实现。
 *
 * @author Haart
 */
public abstract class AbstractUserPermProvider
        extends AbstractService
        implements UserPermProvider {

    protected static final int PROP_STRING_TYPE = 0;
    protected static final int PROP_NUMBER_TYPE = 1;
    protected static final int PROP_BOOLEAN_TYPE = 2;


    /**
     * 对字符串进行扰动之后再哈希。
     *
     * @param s
     *         原始字符串。
     * @return 哈希的结果字符串。
     */
    protected static String hashString(
            String s
    ) {
        final String salt = trimToEmpty(configuration().getHashSalt());

        return Base64.getEncoder().encodeToString(hash(disturb(s, salt)));
    }


    /**
     * 生成缺省密码。
     *
     * @return 从配置文件中获取的缺省密码。
     */
    private static String defaultPassword() {
        return configuration().getDefaultPassword();
    }

    /**
     * 获取身份认证相关的配置节。
     *
     * @return 身份认证相关的配置节。
     */
    private static AuthenticationSection configuration() {
        return ConfigurationManager.getConfiguration().getSecurity().getAuthentication();
    }

    /**
     * 生成一个新密码。
     *
     * @return 生成的新密码。
     */
    protected String newPassword() {
        return defaultPassword();
    }
}
